import { getNewsList } from '@/services';
import { IHomeState, INewsInfo, IPostData, NAV_TYPES } from '@/typings';
import { Commit } from 'vuex';
import * as actionTypes from './actionTypes';

export default {
  //定义action
  /**
   * 设置news数据
   * @param param0 一个解构对象{commit,state}
   * @param options 请求数据需要的参数
   * @returns void
   */
  [actionTypes.SET_NEWS_LIST](
    //解构{ commit, state } = ctx
    { commit, state }: { commit: Commit; state: IHomeState },
    options: IPostData
  ): void {
    //isLoading时不能请求数据
    if (state.newsList.isLoading) {
      return;
    }

    //没有更多信息时不能请求数据
    if (!state.newsList.hasMore) {
      return;
    }

    /**
     * pageNum === 0, 第一页加载的时候，要用骨架屏, [正在加载中...]就不能显示
     * pageNum > 0, 不是第一页, 就是触底加载更多, 就要显示 [正在加载中...]
     */
    //pageNum=0时说明是第一页,第一页应该有更多和loading
    if (state.newsList.pageNum) {
      commit(actionTypes.SET_LOADING, 'true');
    }

    //请求数据, 返回的数据类型INewsInfo[]
    getNewsList<INewsInfo[]>(options)
      .then((data) => {
        //commit -> mutation里定义的方法去操作数据
        commit(actionTypes.SET_NEWS_LIST, data);
      })
      .catch((err) => {
        throw err;
      });
  },

  /**
   *修改新闻类型
   * @param param0
   * @param type
   */
  [actionTypes.SET_CURRENT_TYPE](
    { commit }: { commit: Commit },
    type: NAV_TYPES
  ): void {
    commit(actionTypes.SET_CURRENT_TYPE, type);
  }
};
